#ifndef __STM32F4XX_RSA_H
#define __STM32F4XX_RSA_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdint.h>

/* HALStatus定义 */
typedef enum {
    HAL_OK       = 0x00,
    HAL_ERROR    = 0x01,
    HAL_BUSY     = 0x02,
    HAL_TIMEOUT  = 0x03
} HAL_StatusTypeDef;

/* RSACommand定义 */
#define RSA_CMD_ENCRYPT    0x00  // 公钥加密
#define RSA_CMD_DECRYPT    0x01  // 私钥解密

/**
 * @brief InitializeRSAModule
 * @retval HALStatus
 */
HAL_StatusTypeDef RSA_Init(void);

/**
 * @brief SettingsRSAKey
 * @param key Key指针（256字节：N + D）
 * @param key_len Key长度
 * @retval HALStatus
 */
HAL_StatusTypeDef RSA_SetKey(uint8_t* key, uint32_t key_len);

/**
 * @brief ExecuteRSACommand（加密Or解密）
 * @param cmd Command：RSA_CMD_ENCRYPT Or RSA_CMD_DECRYPT
 * @param input InputData（128字节）
 * @param input_len Input长度（必须For128）
 * @param output OutputData（128字节）
 * @param output_len Output长度（由Function填写）
 * @retval HALStatus
 */
HAL_StatusTypeDef RSA_ProcessCommand(uint8_t cmd, 
                                     const uint8_t* input, 
                                     uint32_t input_len,
                                     uint8_t* output, 
                                     uint32_t* output_len);

#ifdef __cplusplus
}
#endif

#endif /* __STM32F4XX_RSA_H */
